/*
ont-space - The ontology-based resource metadata repository
Copyright (c) 2006-2008, Information Eng. Research Unit - Univ. of Alcalá
http://www.cc.uah.es/ie
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either version 2.1 of the License, or (at your option)
any later version.
This library is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
details.
You should have received a copy of the GNU Lesser General Public License along
with this library; if not, write to the Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
package org.ontspace.oki.examples;

import org.osid.repository.Repository;
import org.osid.repository.RepositoryException;
import org.osid.shared.SharedException;
import org.ontspace.MetadataRecordReference;
import org.ontspace.MetadataRepository;
import org.ontspace.owl.util.MetadataRepositoryConfigException;
import org.ontspace.oki.MetadataRepository2OkiAdapter;
import org.ontspace.owl.MetadataRepositoryFactory;
import org.ontspace.owl.MetadataRepositoryImpl;
import java.io.FileNotFoundException;
import java.io.Serializable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import javax.xml.bind.JAXBException;

import org.osid.shared.Type;
import org.ontspace.oki.owl.OspaceOKIAssetImpl;
import org.ontspace.oki.owl.OspaceOKIAssetIteratorImpl;

/**
 *
 * @author Administrador
 */
public class ExampleSLDOSIDRepositoryUse {

    public static void main(String args[])
            throws MetadataRepositoryConfigException, RepositoryException,
            SharedException, JAXBException, FileNotFoundException {

        //Open repository        
        HashMap params =
                new HashMap();
        params.put(MetadataRepository.STORAGE_URI_PARAM,
                "jdbc:mysql://localhost/sld-ospace");
        params.put(MetadataRepository.USER_NAME_PARAM,
                "root");
        params.put(MetadataRepository.PWD_PARAM,
                "password");
        params.put(MetadataRepositoryImpl.DB_DRIVER_PARAM,
                "com.mysql.jdbc.Driver");
        params.put(MetadataRepositoryImpl.DB_TYPE_PARAM,
                "MySQL");
        params.put(MetadataRepositoryImpl.DC_SCHEMA_PATH_PARAM,
                "C:/mydirectory/cvs/ont-space/etc/lom-ont-space.owl");

        try {
            params.put(MetadataRepository.PUBLIC_REP_URI_PARAM,
                    new URI("http://o-space.org/rep"));
        } catch (URISyntaxException e) {
            System.out.println(e);
        }

        //Gets the metadata repository
        MetadataRepository rep =
                MetadataRepositoryFactory.openMetadataRepository(params);

        //Adapt to oki repository
        Repository okiRep =
                MetadataRepository2OkiAdapter.adapt(rep);
        System.out.println(okiRep.getId().getIdString());


        //search criteria        
        String searchCriteria =
                "learner";

        //searchType
        org.osid.shared.Type searchType =
                new TypeImpl("ospace", //authority
                "queryLOWhichRolePartContainsLAandSA", //domain
                "http://www.cc.uah.es/ie/ont/sld-ospace"); //keyword

        //GET THE QUERY
        OspaceOKIAssetIteratorImpl resultAssetIterator =
                (OspaceOKIAssetIteratorImpl) okiRep.
                    getAssetsBySearch((Serializable) searchCriteria,
                            searchType, null);

        //GET RESULTS
        OspaceOKIAssetImpl resultAsset =
                (OspaceOKIAssetImpl) resultAssetIterator.nextAsset();

        Set<MetadataRecordReference> resultsMrr =
                (Set<MetadataRecordReference>) resultAsset.getContent();



        //PRINT RESULTS
        if (resultsMrr.size() == 0) {
            System.out.println("No results found");
        } else {
            for (Iterator iter =
                    resultsMrr.iterator(); iter.hasNext();) {
                MetadataRecordReference mrr =
                        (MetadataRecordReference) iter.next();
                String identifier =
                        mrr.getLocalMetadataRecordId().
                        toString();
                System.out.println("Identifier --> " + identifier);

            }
        }
    }

    private static class TypeImpl extends Type {

        public TypeImpl(String arg0, String arg1, String arg2) {
            super(arg0, arg1, arg2);
        }
    }
}
